package tree

import "fmt"

type TreeNode struct {
	Value       int
	Left, Right *TreeNode
}

func createTreeNode(value int) *TreeNode {
	return &TreeNode{Value: value}
	/*
		在goalng中，内存分配在堆中还是栈中由编译器智能抉择
	*/
}

/*
	为treeNode编写方法
*/
func (node TreeNode) Print() {
	fmt.Println(node.Value)
}

func (node TreeNode) GetValue() int {
	return node.Value
}

func (node *TreeNode) SetValue(value int) {
	if node == nil {
		fmt.Println("Nil")
		return
		/*
				golang中nil可以作为pointer, channel, func, interface, map 或者 slice的参数传递，
			   （提供便利，减少判断）
			    但不可以调用方法等（会报错）
		*/
	}
	node.Value = value
	/*
		在golang中对类的对象或者对象指针访问时都 用.  不用->
	*/
}

func (node *TreeNode) Tranverse() {
	if node == nil {
		return
	}
	node.Print()
	node.Left.Tranverse()
	node.Right.Tranverse()
}
